package reflect;

import java.lang.reflect.Method;

/**
 * 暴力反射：反射机制访问私有成员
 */
public class Demo08Reflect {
    public static void main(String[] args) throws Exception {
        //1.以前写法
        //Person p = new Person();
        //p.hehe();//类的外部不能访问类的私有成员，编译不通过；

        //2.反射写法：行！！！
        /*
            反射提供了两套方法：
            1.不带declared关键字：
                仅能获取到本类中的公开方法，以及从超类继承的方法；
            2.带daclared关键字：
                可以获取到本来已定义的所有方法，包括私有方法，不包含从超类继承的；
            3.
         */
        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        Method method = cls.getMethod("hehe");
        method.setAccessible(true);
        method.invoke(obj);
        method.setAccessible(false);
    }
}
